package com.lianqi.emcpframework.design.domain.event;

import java.util.List;

/**
 * @program emcp-framework
 * @ClassName DomainEventPublisher
 * @description: 领域事件发表接口
 * @author: sky
 * @create: 2019/06/06 10:24
 */
public interface DomainEventPublisher {
    /**
     * 发布事件
     * @param event 领域事件
     * @param <ID> id泛型
     * @param <EVENT> 事件泛型
     */
    <ID,EVENT extends DomainEvent> void publish(EVENT event);

    /**
     * 发布事件集合
     * @param events 领域事件集合
     * @param <ID>  id泛型
     * @param <EVENT> 事件泛型
     */
    default <ID,EVENT extends DomainEvent> void publishAll(List<EVENT> events){
        events.forEach(this :: publish);
    }
}
